#ifndef CUFFTDX_FFT_18_FP64_FWD_PTX_HPP
#define CUFFTDX_FFT_18_FP64_FWD_PTX_HPP



template<> __forceinline__ __device__ void cufftdx_private_function<408, double, 1>(cufftdx::detail::complex<double> *rmem, unsigned smem){

asm volatile (R"({
.reg .f64 fd<381>;
.reg .b64 rd<2>;
add.f64 fd73, %52, %68;
add.f64 fd74, %36, fd73;
add.f64 fd75, %53, %69;
add.f64 fd76, %37, fd75;
mul.f64 fd77, fd73, 0d3FE0000000000000;
sub.f64 fd78, %36, fd77;
sub.f64 fd79, %53, %69;
mul.f64 fd80, fd79, 0d3FEBB67AE8584CAA;
add.f64 fd81, fd80, fd78;
sub.f64 fd82, fd78, fd80;
mul.f64 fd83, fd75, 0d3FE0000000000000;
sub.f64 fd84, %37, fd83;
sub.f64 fd85, %52, %68;
mul.f64 fd86, fd85, 0d3FEBB67AE8584CAA;
sub.f64 fd87, fd84, fd86;
add.f64 fd88, fd86, fd84;
add.f64 fd89, %57, %73;
add.f64 fd90, %41, fd89;
add.f64 fd91, %59, %75;
add.f64 fd92, %43, fd91;
mul.f64 fd93, fd89, 0d3FE0000000000000;
sub.f64 fd94, %41, fd93;
sub.f64 fd95, %59, %75;
mul.f64 fd96, fd95, 0d3FEBB67AE8584CAA;
add.f64 fd97, fd96, fd94;
sub.f64 fd98, fd94, fd96;
mul.f64 fd99, fd91, 0d3FE0000000000000;
sub.f64 fd100, %43, fd99;
sub.f64 fd101, %57, %73;
mul.f64 fd102, fd101, 0d3FEBB67AE8584CAA;
sub.f64 fd103, fd100, fd102;
add.f64 fd104, fd102, fd100;
add.f64 fd105, %62, %78;
add.f64 fd106, %46, fd105;
add.f64 fd107, %64, %80;
add.f64 fd108, %48, fd107;
mul.f64 fd109, fd105, 0d3FE0000000000000;
sub.f64 fd110, %46, fd109;
sub.f64 fd111, %64, %80;
mul.f64 fd112, fd111, 0d3FEBB67AE8584CAA;
add.f64 fd113, fd112, fd110;
sub.f64 fd114, fd110, fd112;
mul.f64 fd115, fd107, 0d3FE0000000000000;
sub.f64 fd116, %48, fd115;
sub.f64 fd117, %62, %78;
mul.f64 fd118, fd117, 0d3FEBB67AE8584CAA;
sub.f64 fd119, fd116, fd118;
add.f64 fd120, fd118, fd116;
mul.f64 fd121, fd97, 0d3FE8836FA2CF5039;
mul.f64 fd122, fd103, 0dBFE491B7523C161D;
sub.f64 fd123, fd121, fd122;
mul.f64 fd124, fd103, 0d3FE8836FA2CF5039;
fma.rn.f64 fd125, fd97, 0dBFE491B7523C161D, fd124;
mul.f64 fd126, fd113, 0d3FC63A1A7E0B738A;
mul.f64 fd127, fd119, 0dBFEF838B8C811C17;
sub.f64 fd128, fd126, fd127;
mul.f64 fd129, fd119, 0d3FC63A1A7E0B738A;
fma.rn.f64 fd130, fd113, 0dBFEF838B8C811C17, fd129;
mul.f64 fd131, fd98, 0d3FC63A1A7E0B738A;
mul.f64 fd132, fd104, 0dBFEF838B8C811C17;
sub.f64 fd133, fd131, fd132;
mul.f64 fd134, fd104, 0d3FC63A1A7E0B738A;
fma.rn.f64 fd135, fd98, 0dBFEF838B8C811C17, fd134;
mul.f64 fd136, fd114, 0dBFEE11F642522D1C;
mul.f64 fd137, fd120, 0dBFD5E3A8748A0BF5;
sub.f64 fd138, fd136, fd137;
mul.f64 fd139, fd120, 0dBFEE11F642522D1C;
fma.rn.f64 fd140, fd114, 0dBFD5E3A8748A0BF5, fd139;
add.f64 fd141, fd90, fd106;
add.f64 fd142, fd74, fd141;
add.f64 fd143, fd92, fd108;
add.f64 fd144, fd76, fd143;
mul.f64 fd145, fd141, 0d3FE0000000000000;
sub.f64 fd146, fd74, fd145;
sub.f64 fd147, fd92, fd108;
mul.f64 fd148, fd147, 0d3FEBB67AE8584CAA;
add.f64 fd149, fd148, fd146;
sub.f64 fd150, fd146, fd148;
mul.f64 fd151, fd143, 0d3FE0000000000000;
sub.f64 fd152, fd76, fd151;
sub.f64 fd153, fd90, fd106;
mul.f64 fd154, fd153, 0d3FEBB67AE8584CAA;
sub.f64 fd155, fd152, fd154;
add.f64 fd156, fd154, fd152;
add.f64 fd157, fd123, fd128;
add.f64 fd158, fd81, fd157;
add.f64 fd159, fd125, fd130;
add.f64 fd160, fd87, fd159;
mul.f64 fd161, fd157, 0d3FE0000000000000;
sub.f64 fd162, fd81, fd161;
sub.f64 fd163, fd125, fd130;
mul.f64 fd164, fd163, 0d3FEBB67AE8584CAA;
add.f64 fd165, fd164, fd162;
sub.f64 fd166, fd162, fd164;
mul.f64 fd167, fd159, 0d3FE0000000000000;
sub.f64 fd168, fd87, fd167;
sub.f64 fd169, fd123, fd128;
mul.f64 fd170, fd169, 0d3FEBB67AE8584CAA;
sub.f64 fd171, fd168, fd170;
add.f64 fd172, fd170, fd168;
add.f64 fd173, fd133, fd138;
add.f64 fd174, fd82, fd173;
add.f64 fd175, fd135, fd140;
add.f64 fd176, fd88, fd175;
mul.f64 fd177, fd173, 0d3FE0000000000000;
sub.f64 fd178, fd82, fd177;
sub.f64 fd179, fd135, fd140;
mul.f64 fd180, fd179, 0d3FEBB67AE8584CAA;
add.f64 fd181, fd180, fd178;
sub.f64 fd182, fd178, fd180;
mul.f64 fd183, fd175, 0d3FE0000000000000;
sub.f64 fd184, fd88, fd183;
sub.f64 fd185, fd133, fd138;
mul.f64 fd186, fd185, 0d3FEBB67AE8584CAA;
sub.f64 fd187, fd184, fd186;
add.f64 fd188, fd186, fd184;
add.f64 fd189, %54, %70;
add.f64 fd190, %38, fd189;
add.f64 fd191, %56, %72;
add.f64 fd192, %40, fd191;
mul.f64 fd193, fd189, 0d3FE0000000000000;
sub.f64 fd194, %38, fd193;
sub.f64 fd195, %56, %72;
mul.f64 fd196, fd195, 0d3FEBB67AE8584CAA;
add.f64 fd197, fd196, fd194;
sub.f64 fd198, fd194, fd196;
mul.f64 fd199, fd191, 0d3FE0000000000000;
sub.f64 fd200, %40, fd199;
sub.f64 fd201, %54, %70;
mul.f64 fd202, fd201, 0d3FEBB67AE8584CAA;
sub.f64 fd203, fd200, fd202;
add.f64 fd204, fd202, fd200;
add.f64 fd205, %60, %76;
add.f64 fd206, %44, fd205;
add.f64 fd207, %61, %77;
add.f64 fd208, %45, fd207;
mul.f64 fd209, fd205, 0d3FE0000000000000;
sub.f64 fd210, %44, fd209;
sub.f64 fd211, %61, %77;
mul.f64 fd212, fd211, 0d3FEBB67AE8584CAA;
add.f64 fd213, fd212, fd210;
sub.f64 fd214, fd210, fd212;
mul.f64 fd215, fd207, 0d3FE0000000000000;
sub.f64 fd216, %45, fd215;
sub.f64 fd217, %60, %76;
mul.f64 fd218, fd217, 0d3FEBB67AE8584CAA;
sub.f64 fd219, fd216, fd218;
add.f64 fd220, fd218, fd216;
add.f64 fd221, %65, %81;
add.f64 fd222, %49, fd221;
add.f64 fd223, %67, %82;
add.f64 fd224, %51, fd223;
mul.f64 fd225, fd221, 0d3FE0000000000000;
sub.f64 fd226, %49, fd225;
sub.f64 fd227, %67, %82;
mul.f64 fd228, fd227, 0d3FEBB67AE8584CAA;
add.f64 fd229, fd228, fd226;
sub.f64 fd230, fd226, fd228;
mul.f64 fd231, fd223, 0d3FE0000000000000;
sub.f64 fd232, %51, fd231;
sub.f64 fd233, %65, %81;
mul.f64 fd234, fd233, 0d3FEBB67AE8584CAA;
sub.f64 fd235, fd232, fd234;
add.f64 fd236, fd234, fd232;
mul.f64 fd237, fd213, 0d3FE8836FA2CF5039;
mul.f64 fd238, fd219, 0dBFE491B7523C161D;
sub.f64 fd239, fd237, fd238;
mul.f64 fd240, fd219, 0d3FE8836FA2CF5039;
fma.rn.f64 fd241, fd213, 0dBFE491B7523C161D, fd240;
mul.f64 fd242, fd229, 0d3FC63A1A7E0B738A;
mul.f64 fd243, fd235, 0dBFEF838B8C811C17;
sub.f64 fd244, fd242, fd243;
mul.f64 fd245, fd235, 0d3FC63A1A7E0B738A;
fma.rn.f64 fd246, fd229, 0dBFEF838B8C811C17, fd245;
mul.f64 fd247, fd214, 0d3FC63A1A7E0B738A;
mul.f64 fd248, fd220, 0dBFEF838B8C811C17;
sub.f64 fd249, fd247, fd248;
mul.f64 fd250, fd220, 0d3FC63A1A7E0B738A;
fma.rn.f64 fd251, fd214, 0dBFEF838B8C811C17, fd250;
mul.f64 fd252, fd230, 0dBFEE11F642522D1C;
mul.f64 fd253, fd236, 0dBFD5E3A8748A0BF5;
sub.f64 fd254, fd252, fd253;
mul.f64 fd255, fd236, 0dBFEE11F642522D1C;
fma.rn.f64 fd256, fd230, 0dBFD5E3A8748A0BF5, fd255;
add.f64 fd257, fd206, fd222;
add.f64 fd258, fd190, fd257;
add.f64 fd259, fd208, fd224;
add.f64 fd260, fd192, fd259;
mul.f64 fd261, fd257, 0d3FE0000000000000;
sub.f64 fd262, fd190, fd261;
sub.f64 fd263, fd208, fd224;
mul.f64 fd264, fd263, 0d3FEBB67AE8584CAA;
add.f64 fd265, fd264, fd262;
sub.f64 fd266, fd262, fd264;
mul.f64 fd267, fd259, 0d3FE0000000000000;
sub.f64 fd268, fd192, fd267;
sub.f64 fd269, fd206, fd222;
mul.f64 fd270, fd269, 0d3FEBB67AE8584CAA;
sub.f64 fd271, fd268, fd270;
add.f64 fd272, fd270, fd268;
add.f64 fd273, fd239, fd244;
add.f64 fd274, fd197, fd273;
add.f64 fd275, fd241, fd246;
add.f64 fd276, fd203, fd275;
mul.f64 fd277, fd273, 0d3FE0000000000000;
sub.f64 fd278, fd197, fd277;
sub.f64 fd279, fd241, fd246;
mul.f64 fd280, fd279, 0d3FEBB67AE8584CAA;
add.f64 fd281, fd280, fd278;
sub.f64 fd282, fd278, fd280;
mul.f64 fd283, fd275, 0d3FE0000000000000;
sub.f64 fd284, fd203, fd283;
sub.f64 fd285, fd239, fd244;
mul.f64 fd286, fd285, 0d3FEBB67AE8584CAA;
sub.f64 fd287, fd284, fd286;
add.f64 fd288, fd286, fd284;
add.f64 fd289, fd249, fd254;
add.f64 fd290, fd198, fd289;
add.f64 fd291, fd251, fd256;
add.f64 fd292, fd204, fd291;
mul.f64 fd293, fd289, 0d3FE0000000000000;
sub.f64 fd294, fd198, fd293;
sub.f64 fd295, fd251, fd256;
mul.f64 fd296, fd295, 0d3FEBB67AE8584CAA;
add.f64 fd297, fd296, fd294;
sub.f64 fd298, fd294, fd296;
mul.f64 fd299, fd291, 0d3FE0000000000000;
sub.f64 fd300, fd204, fd299;
sub.f64 fd301, fd249, fd254;
mul.f64 fd302, fd301, 0d3FEBB67AE8584CAA;
sub.f64 fd303, fd300, fd302;
add.f64 fd304, fd302, fd300;
mul.f64 fd305, fd274, 0d3FEE11F642522D1C;
mul.f64 fd306, fd276, 0dBFD5E3A8748A0BF5;
sub.f64 fd307, fd305, fd306;
mul.f64 fd308, fd276, 0d3FEE11F642522D1C;
fma.rn.f64 fd309, fd274, 0dBFD5E3A8748A0BF5, fd308;
mul.f64 fd310, fd290, 0d3FE8836FA2CF5039;
mul.f64 fd311, fd292, 0dBFE491B7523C161D;
sub.f64 fd312, fd310, fd311;
mul.f64 fd313, fd292, 0d3FE8836FA2CF5039;
fma.rn.f64 fd314, fd290, 0dBFE491B7523C161D, fd313;
mul.f64 fd315, fd265, 0d3FE0000000000000;
mul.f64 fd316, fd271, 0dBFEBB67AE8584CAA;
sub.f64 fd317, fd315, fd316;
mul.f64 fd318, fd271, 0d3FE0000000000000;
fma.rn.f64 fd319, fd265, 0dBFEBB67AE8584CAA, fd318;
mul.f64 fd320, fd281, 0d3FC63A1A7E0B738A;
mul.f64 fd321, fd287, 0dBFEF838B8C811C17;
sub.f64 fd322, fd320, fd321;
mul.f64 fd323, fd287, 0d3FC63A1A7E0B738A;
fma.rn.f64 fd324, fd281, 0dBFEF838B8C811C17, fd323;
mul.f64 fd325, fd297, 0dBFC63A1A7E0B738A;
mul.f64 fd326, fd303, 0dBFEF838B8C811C17;
sub.f64 fd327, fd325, fd326;
mul.f64 fd328, fd303, 0dBFC63A1A7E0B738A;
fma.rn.f64 fd329, fd297, 0dBFEF838B8C811C17, fd328;
mul.f64 fd330, fd266, 0dBFE0000000000000;
mul.f64 fd331, fd272, 0dBFEBB67AE8584CAA;
sub.f64 fd332, fd330, fd331;
mul.f64 fd333, fd272, 0dBFE0000000000000;
fma.rn.f64 fd334, fd266, 0dBFEBB67AE8584CAA, fd333;
mul.f64 fd335, fd282, 0dBFE8836FA2CF5039;
mul.f64 fd336, fd288, 0dBFE491B7523C161D;
sub.f64 fd337, fd335, fd336;
mul.f64 fd338, fd288, 0dBFE8836FA2CF5039;
fma.rn.f64 fd339, fd282, 0dBFE491B7523C161D, fd338;
mul.f64 fd340, fd298, 0dBFEE11F642522D1C;
mul.f64 fd341, fd304, 0dBFD5E3A8748A0BF5;
sub.f64 fd342, fd340, fd341;
mul.f64 fd343, fd304, 0dBFEE11F642522D1C;
fma.rn.f64 fd344, fd298, 0dBFD5E3A8748A0BF5, fd343;
add.f64 %1, fd144, fd260;
add.f64 %0, fd142, fd258;
add.f64 %3, fd160, fd309;
add.f64 %2, fd158, fd307;
add.f64 %5, fd176, fd314;
add.f64 %4, fd174, fd312;
add.f64 %7, fd155, fd319;
add.f64 %6, fd149, fd317;
add.f64 %9, fd171, fd324;
add.f64 %8, fd165, fd322;
add.f64 %11, fd187, fd329;
add.f64 %10, fd181, fd327;
add.f64 %13, fd156, fd334;
add.f64 %12, fd150, fd332;
add.f64 %15, fd172, fd339;
add.f64 %14, fd166, fd337;
add.f64 %17, fd188, fd344;
add.f64 %16, fd182, fd342;
sub.f64 %19, fd144, fd260;
sub.f64 %18, fd142, fd258;
sub.f64 %21, fd160, fd309;
sub.f64 %20, fd158, fd307;
sub.f64 %23, fd176, fd314;
sub.f64 %22, fd174, fd312;
sub.f64 %25, fd155, fd319;
sub.f64 %24, fd149, fd317;
sub.f64 %27, fd171, fd324;
sub.f64 %26, fd165, fd322;
sub.f64 %29, fd187, fd329;
sub.f64 %28, fd181, fd327;
sub.f64 %31, fd156, fd334;
sub.f64 %30, fd150, fd332;
sub.f64 %33, fd172, fd339;
sub.f64 %32, fd166, fd337;
sub.f64 %35, fd188, fd344;
sub.f64 %34, fd182, fd342;
})"
     : "=d"(rmem[0].x), "=d"(rmem[0].y), "=d"(rmem[1].x), "=d"(rmem[1].y), "=d"(rmem[2].x), "=d"(rmem[2].y), "=d"(rmem[3].x), "=d"(rmem[3].y), "=d"(rmem[4].x), "=d"(rmem[4].y), "=d"(rmem[5].x), "=d"(rmem[5].y), "=d"(rmem[6].x), "=d"(rmem[6].y), "=d"(rmem[7].x), "=d"(rmem[7].y), "=d"(rmem[8].x), "=d"(rmem[8].y), "=d"(rmem[9].x), "=d"(rmem[9].y), "=d"(rmem[10].x), "=d"(rmem[10].y), "=d"(rmem[11].x), "=d"(rmem[11].y), "=d"(rmem[12].x), "=d"(rmem[12].y), "=d"(rmem[13].x), "=d"(rmem[13].y), "=d"(rmem[14].x), "=d"(rmem[14].y), "=d"(rmem[15].x), "=d"(rmem[15].y), "=d"(rmem[16].x), "=d"(rmem[16].y), "=d"(rmem[17].x), "=d"(rmem[17].y): "d"(rmem[0].x), "d"(rmem[0].y), "d"(rmem[1].x), "d"(rmem[1].y), "d"(rmem[1].y), "d"(rmem[2].x), "d"(rmem[2].y), "d"(rmem[2].y), "d"(rmem[3].x), "d"(rmem[3].y), "d"(rmem[4].x), "d"(rmem[4].y), "d"(rmem[4].y), "d"(rmem[5].x), "d"(rmem[5].y), "d"(rmem[5].y), "d"(rmem[6].x), "d"(rmem[6].y), "d"(rmem[7].x), "d"(rmem[7].y), "d"(rmem[7].y), "d"(rmem[8].x), "d"(rmem[8].y), "d"(rmem[8].y), "d"(rmem[9].x), "d"(rmem[9].y), "d"(rmem[10].x), "d"(rmem[10].y), "d"(rmem[10].y), "d"(rmem[11].x), "d"(rmem[11].y), "d"(rmem[11].y), "d"(rmem[12].x), "d"(rmem[12].y), "d"(rmem[13].x), "d"(rmem[13].y), "d"(rmem[13].y), "d"(rmem[14].x), "d"(rmem[14].y), "d"(rmem[14].y), "d"(rmem[15].x), "d"(rmem[15].y), "d"(rmem[16].x), "d"(rmem[16].y), "d"(rmem[16].y), "d"(rmem[17].x), "d"(rmem[17].y));
};


#endif
